package com.web.servlet;

import com.web.bean.User;
import com.web.dao.UserDao;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;

//当前类通过继承了HttpServlet，来扩展了web的处理功能
//@WebServlet作用是定义当前请求处理类的访问uri地址
//  http://localhost:8080/WebDemo/loginUser?loginname=admin&password=123456
@WebServlet("/loginUser")//请求uri可以修改，但是在同一个工程中uri不同重复
public class HelloServlet extends HttpServlet {

    //doGet方法是用于接收get请求的
    @Override   //          request  请求对象           response  响应对象
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应编码为gbk
        // response.setCharacterEncoding("GBK");
        request.setCharacterEncoding("UTF-8");//请求对象设置编码
        //1、从请求对象中获取请求参数【登录名、密码】 通过getParameter方法根据key来获取value
        String loginname = request.getParameter("loginname");//没有获取到该数据则为null
        String password = request.getParameter("password");
        //2、进行登录校验
        //做一个非空判断
        if (loginname==null||loginname.equals("")) {
            //在Servlet请求处理类中保存信息（key-value）到属性作用域(容器)【保存】 request作用域
            request.setAttribute("message","登录名不能为空！");
            //3、进行响应--登录名或密码不能为空
            request.getRequestDispatcher("login.jsp").forward(request,response);
            //结束方法
            return;
        }
        if (password==null||password.equals("")) {
            //【保存】 request作用域
            request.setAttribute("message","密码不能为空！");
            //3、进行响应--登录名或密码不能为空
            request.getRequestDispatcher("login.jsp").forward(request,response);
            //结束方法
            return;
        }
       //if (loginname.equals("admin") && password.equals("123456")) {
        //调用数据库的登录查询，查询是否有该用户数据
        //创建UserDao的对象
        UserDao dao = new UserDao();
        //进行登录查询
        User loginUser = dao.queryUserLogin(loginname,password);
        //校验
        if (loginUser!=null) {//表示登录成功--有该用户数据
            //3、进行响应--成功--跳转到首页
            //将user对象保存在session容器中
            request.getSession().setAttribute("NowUser",loginUser);
            request.getRequestDispatcher("index.jsp").forward(request,response);//转发：无法访问外部程序
            //response.sendRedirect("http://www.baidu.com");//注意：重定向访问地址要绝对路径
        } else {
            //3、进行响应--失败--跳转到登录页面
            //【保存】 request作用域 不同请求获不到
            request.setAttribute("message","request-用户名或密码错误！");
            //request.getSession().setAttribute("message","Session-用户名或密码错误！");
            request.setAttribute("loginname", loginname);
            request.setAttribute("password", password);
            //【保存】session作用域 同一台主机、同一个浏览器
             /*request.getSession().setAttribute("message","用户名或密码错误！");
            request.getSession().setAttribute("loginname",loginname);
            request.getSession().setAttribute("password",password);*/
            //【保存】application作用域 最大 当前应用（同一个项目）
            /*
            request.getServletContext().setAttribute("message","用户名或密码错误！");
            request.getServletContext().setAttribute("loginname",loginname);
            request.getServletContext().setAttribute("password",password);*/
            //response.getWriter().append("User Login Failed!");
            //转发是请求链没有断开的
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }
    }

    //doPost方法是用于接收Post请求的
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //调用了上面的doGet，目的是方便操作【不管是get、post都可以在doGet中编写处理代码】
        doGet(request, response);
    }
}
